import time
#定义一个手机类,  出厂的时候就贴好膜，出厂的时候就要有编号,并且编号要实现自动化填入。
#能告诉我现在一共生产了哪些手机
#能告诉一共生产了几个手机，用返回值得方式。
#当手机 del 的时候，需要在phonelist中移除。



class Phone(object):   # 一般类名首字母大写（大驼峰规则）； 旧版本中（） 以及（object） 都可以不写。

    serial_no=10000  # 【类属性】第一编号是这样的。
    phonelist=[]

    # 如何返回phonelist 的长度？
    @classmethod   # 标记下面的方法是类上的方法，而不是实例上的方法
    def phone_count(cls): # cls 表示的就是类自己，本身。
        # return len(Phone.phonelist)   # 访问类属性方法一。
        # return len(cls.phonelist)
        return Phone.count_list(cls.phonelist) # 使用静态方法

    # 静态方法的出现原因？ 封装在类下面
    @staticmethod    # 标记下面的方法与 类 和 实例 都不相关 （也就是不需要传self，cls）
    def count_list(li):
        return len(li)

    def __init__(self):  # init 初始化[构造]方法，会【在其他方法之前运行】，并且【实例化时会自动运行】
        self.mo="钢化膜"
        self.color="red"
        self.no=Phone.serial_no  # 取用类上的属性
        Phone.phonelist.append(self.no)  #把编号记录到类属性中
        Phone.serial_no+=1 # 把类属性加1

        # serial_no=9999 # 是否会修改到类属性serial_no？？？？

    #定义手机的方法
    def call(self,number):  # 在工厂中定义手机的方法，就是写函数。 【self 不能少，建议名字不要改】--> 表示实例自身
        taketime=2
        time.sleep(taketime)
        print(f"---已拨通{number}----")
        return taketime

    def sendMeg(self):
        print("---发送短信----")

    def testcount(self):
        print(Phone.count_list(Phone.phonelist))  # 调用类上的静态方法

    # def __del__(self):   #del  销毁方法【析构】，在对象消亡的时候【自动】运行
    #     print(self.no,"我不在了")
    #     Phone.phonelist.remove(self.no)

    def __str__(self): # 打印对象的时候执行的函数。

        return f"我的编号是{self.no},贴的膜是{self.mo},颜色是{self.color}"

p1=Phone()

p2=Phone()
p3=Phone()
p4=Phone()
p5=Phone()
#
# del p2
print(p1)
print(p2)
# # print(f"phone 类属性 serial_no 值是 {Phone.serial_no}")
# print(f"手机有 {Phone.phonelist}")
print(f"手机数 {Phone.phone_count()}")
p1.testcount()
# print(Phone.count_list([1,2,3,4]))

